﻿using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Systemet.Technical
{
    class ReadFile
    {
        /// <summary>
        /// Connectionen som läser in alla rader från textfiler
        /// </summary>

        private Domain.PrognosController pC;
        private Domain.UppföljningController uC;
        private Domain.ProdukController prodController = new Domain.ProdukController();
        private string pass = AccessController.Instance.Connection;
        private List<Prognos> PrognosList;
        private List<Prognos> tempPrognos;
        private IEnumerable<Produktregister> products;
        private List<DateTime> actualMonths;
        private List<Uppföljning> tempUpp;
        private List<Uppföljning> UppföljningList;
        public List<Prognos> list = new List<Prognos>();
       
        /// <summary>
        /// Läser in textfiler med en Encoder till Prognoser
        /// </summary>
        /// <param name="month"></param>
        public void ReadTxtfile(int month)
        {
            products = prodController.Produktlista;
            Domain.PrognosController pc = new Domain.PrognosController();
            Encoding iso = Encoding.GetEncoding("ISO-8859-1");
            using (StreamReader sr = new StreamReader("IntäktProduktKund.txt", iso))
            {
                PrognosList = new List<Prognos>();
                tempPrognos = new List<Prognos>();
                actualMonths = new List<DateTime>();
                string line;
                sr.ReadLine();
                //while ((line = sr.ReadLine()) != null && (line = sr.ReadLine()) != "")
                while (!string.IsNullOrWhiteSpace(line = sr.ReadLine()))
                {
                    Prognos newPrognos = new Prognos();
                    string[] parts = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);

                    newPrognos.ProduktID = parts[0];
                    newPrognos.Produkt = parts[1];
                    newPrognos.Datum = new DateTime(Convert.ToInt32(parts[4].Substring(0, 4)), Convert.ToInt32(parts[4].Substring(4, 2)), Convert.ToInt32(parts[4].Substring(6, 2)));
                    int utfall = int.Parse(parts[5]);
                    if (utfall < 0)
                    {
                        utfall = utfall * -1;
                    }
                    newPrognos.Utfallmånad = utfall;
                    if (newPrognos.Datum.Month == month)
                    {
                        tempPrognos.Add(newPrognos);
                    }
                }
                
                //Checka om det finns några produkter som inte är inlagda
                foreach (Prognos p in tempPrognos)
                {
                    int index = PrognosList.FindIndex(u => u.ProduktID == p.ProduktID && u.Datum.Month == p.Datum.Month);
                    if (index > -1)
                    {
                        PrognosList[index].Utfallmånad += p.Utfallmånad;

                    }
                    else
                    {
                        PrognosList.Add(p);
                    }
                
                }

                pc.ReadAllFiles(PrognosList, month);
            }

        }
        //Läser textfilen KostnadProdukt till uppföljning
        public void ReadProduktKostnad(int month)
        {
            Domain.UppföljningController uC = new Domain.UppföljningController();
            Encoding iso = Encoding.GetEncoding("ISO-8859-1");
            using (StreamReader sr = new StreamReader("KostnadProdukt.txt", iso))
            {
                UppföljningList = new List<Uppföljning>();
                tempUpp = new List<Uppföljning>();
                actualMonths = new List<DateTime>();
                string line;
                sr.ReadLine();
                while (!string.IsNullOrWhiteSpace(line = sr.ReadLine()))
                {
                    Uppföljning newUpp = new Uppföljning();
                    string[] parts = line.Split(new char[] { '\t' }, StringSplitOptions.RemoveEmptyEntries);

                    newUpp.ProdID = parts[0];
                    newUpp.ProduktNamn = parts[1];
                    newUpp.Date = new DateTime(Convert.ToInt32(parts[2].Substring(0, 4)), Convert.ToInt32(parts[2].Substring(4, 2)), Convert.ToInt32(parts[2].Substring(6, 2)));
                    int kostnadsbelopp = int.Parse(parts[3]);
                    //Från - till +
                    if (kostnadsbelopp < 0)
                    {
                        kostnadsbelopp = kostnadsbelopp * -1;
                    }
                    newUpp.Kostnadsbelopp = kostnadsbelopp;
                    if (newUpp.Date.Month == month)
                    {
                        tempUpp.Add(newUpp);
                    }
                }
                //Ökar på värden där två produkter är likadana
                foreach (Uppföljning p in tempUpp)
                {
                    int index = UppföljningList.FindIndex(u => u.ProdID == p.ProdID && u.Date.Month == p.Date.Month);
                    if (index > -1)
                    {
                        UppföljningList[index].Kostnadsbelopp += p.Kostnadsbelopp;
                    }
                    else
                    {
                        UppföljningList.Add(p);
                    }
                }
                uC.ReadKostnadsFile(UppföljningList, month);
            }
        }


    }
}
